package com.tbit.main.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tbit.main.common.JsonResult;
import com.tbit.main.pojo.AccountUser;
import com.tbit.main.pojo.Machine;
import com.tbit.main.pojo.StockMachine;
import com.tbit.main.pojo.VO.StockMachineVO;

import java.util.List;

/**
 * @Author: chen
 * @Description: 车辆出入库
 * @Date: 创建于 16:49 2023/2/9
 */
public interface StockMachineService extends IService<StockMachine> {

    /**
     * 分页查询
     *
     * @param accountId
     * @param userCode
     * @param pageNO
     * @param rowCount
     * @return
     */
    List<StockMachineVO> queryPage(Integer accountId, String userCode, Integer pageNO, Integer rowCount);


    List<StockMachineVO> selectByWarehouseId(Integer warehouseId);

    List<StockMachineVO> selectByWarehouseIdS(List<Integer> warehouseId,String userCode, Integer accountId);

    /**
     * 总数
     *
     * @param accountId
     * @param userCode
     * @return
     */
    Integer queryCount(Integer accountId, String userCode);

    /**
     * 根据车辆 Id 统计数量
     * @param machineId 车辆 id
     * @return 数量
     */
    Integer countByMachineId(Integer machineId);

    /**
     * 入库
     *
     * @param userCode    车辆编号
     * @param accountUser 登录用户信息
     */
    void add(String userCode, AccountUser accountUser,String warehouseName,String warehouseId,Integer accountId);

    /**
     * 出库
     *
     * @param userCode
     */
    void del(String userCode, AccountUser accountUser,Integer accountId);

    /**
     * 批量入库
     *
     * @param userCodes   车辆编号
     * @param accountUser 登录用户信息
     */
    JsonResult addBatch(List<String> userCodes, AccountUser accountUser,String warehouseName,String warehouseId,Integer accountId);

    /**
     * 批量入库
     *
     * @param userCodes   车辆编号
     * @param accountUser 登录用户信息
     */
    void delBatch(List<String> userCodes, AccountUser accountUser,Integer accountId);

    /**
     * 批量修改库
     *
     * @param userCodes   车辆编号
     * @param accountUser 登录用户信息
     */

    void updateBatch(List<String> machineIdS, AccountUser accountUser,String warehouseName,String warehouseId);

    /**
     * 校验
     *
     * @param machines
     * @param accountUser
     * @param userCodes
     */
    void checkBatch(List<Machine> machines, AccountUser accountUser, List<String> userCodes);


    /**
     * 针对于入库和扣押的批量校验
     *
     * @param machines
     * @param accountUser
     * @param userCodes
     */
    void checkBatchAuth(List<Machine> machines, AccountUser accountUser, List<String> userCodes,Integer accountId);

    /**
     * 获取区域入库设备
     *
     * @param accountId
     * @param regionId
     * @return
     */
    List<StockMachine> getByAccountId(Integer accountId, List<Integer> regionId);

    /**
     * 获取所有入库车辆id
     *
     * @param accountId
     * @return
     */
    List<Integer> getAccountIdMachineId(Integer accountId);

    /**
     * 查询车辆id是否存在入库车辆
     *
     * @param accountId
     * @param machineId
     * @return
     */
    List<Integer> getAccountIdByMachineId(Integer accountId, List<Integer> machineId);

    JsonResult checkMachine(String userCode);

    /**
     * 查询车辆id集合中入库车辆id
     *
     * @param machineIds 车辆id集合
     * @return
     */
    List<Integer> getExist(List<Integer> machineIds);

    /**
     * 根据车辆id批量清除库存车辆状态
     *
     * @param machineIdList 车辆id集合
     */
    void deleteBatchByMachineList(List<Integer> machineIdList, String remark);
}
